// 不定参函数
// 不定参宏函数

#include <iostream>
using namespace std;

void xprintf()
{
    cout << "空参" << endl;
}

//c++风格
template<typename T,typename ...Args>
void xprintf(const T& v,Args&& ...args)
{
    cout << v;
    if(sizeof...(args) > 0)
    {
        // ... 展开不定参
        xprintf(forward<Args>(args)...);
    }
    else 
    {
        cout << "xprintf end" << endl;
    }
}










#define _GUN_SOURCE
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>

#define LOG(fmt,...) printf("%s-%d" fmt,__FILE__,__LINE__,##__VA_ARGS__);


//c语言风格
void printNum(int count,...)
{
    va_list ap;
    va_start(ap,count);//获得指定参数的起始地址
    for(int i = 0;i<count;i++)
    {
        int num = va_arg(ap,int);
        printf("[%d-%d]\n",i,num);
    }
    va_end(ap);
}

void myprintf(const char* fmt ,...)
{
    va_list ap;
    va_start(ap,fmt);
    char* res;
    int n = vasprintf(&res,fmt,ap);

    if(n == -1) exit(-1);

    printf(res);
    free(res);
    va_end(ap);

}

int main()
{
    // LOG("不定参宏函数\n");

    // printNum(2,11,22);

    xprintf("hello world\n","hello c++\n");
    return 0;
}

